struct _BroadwayServer {
GObject parent_instance;
- char *password;
char *address;
int port;
GSocketService *service;
broadway_server_init (BroadwayServer *server)
{
BroadwayWindow *root;
- char *passwd_file;
- char *password, *p;
server->service = g_socket_service_new ();
server->pointer_grab_window_id = -1;
server->id_ht = g_hash_table_new (NULL, NULL);
server->id_counter = 0;
- passwd_file = g_build_filename (g_get_user_config_dir (),
- "broadway.passwd", NULL);
-
- if (g_file_get_contents (passwd_file,
- &password, NULL, NULL))
- {
- p = strchr (password, '\n');
- if (p)
- *p = 0;
- g_strstrip (password);
- if (strlen (password) > 3)
- server->password = password;
- else
- g_free (password);
- }
-
root = g_new0 (BroadwayWindow, 1);
root->id = server->id_counter++;
root->width = 1024;
server->future_mouse_in_toplevel = data->mouse_window_id;
}
-static gboolean
-verify_password (BroadwayServer *server, const char *password)
-{
- char *hash;
- hash = crypt (password, server->password);
- return strcmp (hash, server->password) == 0;
-}
-
static void
parse_input_message (BroadwayInput *input, const char *message)
{
char *p;
gint64 time_;
- if (!input->active)
- {
- /* The input has not been activated yet, handle auth/start */
-
- if (message[0] != 'l' ||
- !verify_password (server, message+1))
- {
- broadway_output_request_auth (input->output);
- broadway_output_flush (input->output);
- }
- else
- start (input);
-
- return;
- }
-
memset (&msg, 0, sizeof (msg));
p = (char *)message;
g_source_set_callback (input->source, (GSourceFunc)input_data_cb, input, NULL);
g_source_attach (input->source, NULL);
- if (input->server->password)
- {
- broadway_output_request_auth (input->output);
- broadway_output_flush (input->output);
- }
- else
- start (input);
+ start (input);
/* Process any data in the pipe already */
parse_input (input);
server->output = input->output;
broadway_output_set_next_serial (server->output, server->saved_serial);
- broadway_output_auth_ok (server->output);
broadway_output_flush (server->output);
broadway_server_resync_windows (server);
doUngrab();
}
+var active = false;
function handleCommands(cmd)
{
+ if (!active) {
+ start();
+ active = true;
+ }
+
while (cmd.pos < cmd.length) {
var id, x, y, w, h, q;
var command = cmd.get_char();
lastSerial = cmd.get_32();
switch (command) {
- case 'l':
- login ();
- break;
-
- case 'L':
- if (loginDiv != null)
- loginDiv.parentNode.removeChild(loginDiv);
- start ();
- break;
-
case 'D':
alert ("disconnected");
inputSocket = null;
sendInput ("d", [w, h]);
}
-var loginDiv = null;
-function login()
-{
- if (loginDiv == null) {
- var div = document.createElement('div');
- document.body.appendChild(div);
- div.innerHTML = "Please enter password<br>";
- div.style.marginTop = "40px";
- div.style.textAlign = "center";
-
- var input = document.createElement("input");
- input.setAttribute("type", "password");
- div.appendChild(input);
- input.focus ();
- input.onkeyup = function(e) {
- if (e.keyCode === 13 && input.value != "") {
- inputSocket.send ("l" + input.value);
- }
- }
- loginDiv = div;
- } else {
- alert ("Wrong password");
- }
-}
-
function connect()
{
var url = window.location.toString();